<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>
  
  <div class="container">
    <h2 class="page-header">Promise 封装 AJAX 操作</h2>
    <button class="btn btn-primary">点击发送 AJAX</button>
  </div>

  <script>
    // 接口地址:  https://api.apiopen.top/getJoke
    // 获取元素对象
    const btn = document.querySelector('button')

    btn.addEventListener('click', function() {
      // 创建 Promise
      const p = new Promise( (resolve, reject) => {

        // 1. 创建对象
        const xhr = new XMLHttpRequest();
        // 2. 初始化
        xhr.open('GET', 'http://127.0.0.1:8080/server')
        // 3. 发送
        xhr.send();
        // 4. 绑定事件处理响应结果
        xhr.onreadystatechange = function() {
          if(xhr.readyState === 4) {
            // 判断响应状态码
            // 2xx
            if (xhr.status >= 200 && xhr.status < 300 ) {
              // 控制台输出响应体
              resolve(xhr.response)
            }else {
              // 控制台输出状态码
              reject(xhr.status)
            }
          }
        }
      });
      // 调用 then 方法
      p.then( value => {
        console.log(value);
      }, reason => {
        console.warn(reason);
      })
    });
  </script>

</body>
</html>